home *** CD-ROM | disk | FTP | other *** search
- package com.sun.xml.parser;
-
- import java.io.ByteArrayInputStream;
- import java.io.FilterInputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.PushbackInputStream;
- import java.io.Reader;
- import java.util.Hashtable;
-
- final class XmlReader extends Reader {
- private static final int MAXPUSHBACK = 512;
- // $FF: renamed from: in java.io.Reader
- private Reader field_0;
- private String assignedEncoding;
- private boolean closed;
- private static final Hashtable charsets = new Hashtable(31);
-
- static {
- charsets.put("UTF-16", "Unicode");
- charsets.put("ISO-10646-UCS-2", "Unicode");
- charsets.put("EBCDIC-CP-US", "cp037");
- charsets.put("EBCDIC-CP-CA", "cp037");
- charsets.put("EBCDIC-CP-NL", "cp037");
- charsets.put("EBCDIC-CP-WT", "cp037");
- charsets.put("EBCDIC-CP-DK", "cp277");
- charsets.put("EBCDIC-CP-NO", "cp277");
- charsets.put("EBCDIC-CP-FI", "cp278");
- charsets.put("EBCDIC-CP-SE", "cp278");
- charsets.put("EBCDIC-CP-IT", "cp280");
- charsets.put("EBCDIC-CP-ES", "cp284");
- charsets.put("EBCDIC-CP-GB", "cp285");
- charsets.put("EBCDIC-CP-FR", "cp297");
- charsets.put("EBCDIC-CP-AR1", "cp420");
- charsets.put("EBCDIC-CP-HE", "cp424");
- charsets.put("EBCDIC-CP-BE", "cp500");
- charsets.put("EBCDIC-CP-CH", "cp500");
- charsets.put("EBCDIC-CP-ROECE", "cp870");
- charsets.put("EBCDIC-CP-YU", "cp870");
- charsets.put("EBCDIC-CP-IS", "cp871");
- charsets.put("EBCDIC-CP-AR2", "cp918");
- }
-
- private XmlReader(InputStream var1) throws IOException {
- super(var1);
- PushbackInputStream var2 = new PushbackInputStream(var1, 512);
- byte[] var3 = new byte[4];
- int var4 = ((FilterInputStream)var2).read(var3);
- if (var4 > 0) {
- var2.unread(var3, 0, var4);
- }
-
- if (var4 == 4) {
- label44:
- switch (var3[0] & 255) {
- case 0:
- if (var3[1] == 60 && var3[2] == 0 && var3[3] == 63) {
- this.setEncoding(var2, "UnicodeBig");
- return;
- }
- break;
- case 60:
- switch (var3[1] & 255) {
- case 0:
- if (var3[2] == 63 && var3[3] == 0) {
- this.setEncoding(var2, "UnicodeLittle");
- return;
- }
- break label44;
- case 63:
- if (var3[2] == 120 && var3[3] == 109) {
- this.useEncodingDecl(var2, "UTF8");
- return;
- }
- default:
- break label44;
- }
- case 76:
- if (var3[1] == 111 && (255 & var3[2]) == 167 && (255 & var3[3]) == 148) {
- this.useEncodingDecl(var2, "CP037");
- return;
- }
- break;
- case 254:
- if ((var3[1] & 255) == 255) {
- this.setEncoding(var2, "UTF-16");
- return;
- }
- break;
- case 255:
- if ((var3[1] & 255) == 254) {
- this.setEncoding(var2, "UTF-16");
- return;
- }
- }
- }
-
- this.setEncoding(var2, "UTF-8");
- }
-
- public void close() throws IOException {
- if (!this.closed) {
- this.field_0.close();
- this.field_0 = null;
- this.closed = true;
- }
- }
-
- public static Reader createReader(InputStream var0) throws IOException {
- return new XmlReader(var0);
- }
-
- public static Reader createReader(InputStream var0, String var1) throws IOException {
- if (var1 == null) {
- return new XmlReader(var0);
- } else if (!"UTF-8".equalsIgnoreCase(var1) && !"UTF8".equalsIgnoreCase(var1)) {
- if (!"US-ASCII".equalsIgnoreCase(var1) && !"ASCII".equalsIgnoreCase(var1)) {
- return (Reader)("ISO-8859-1".equalsIgnoreCase(var1) ? new Iso8859_1Reader(var0) : new InputStreamReader(var0, std2java(var1)));
- } else {
- return new AsciiReader(var0);
- }
- } else {
- return new Utf8Reader(var0);
- }
- }
-
- public String getEncoding() {
- return this.assignedEncoding;
- }
-
- public void mark(int var1) throws IOException {
- if (this.field_0 != null) {
- this.field_0.mark(var1);
- }
-
- }
-
- public boolean markSupported() {
- return this.field_0 == null ? false : this.field_0.markSupported();
- }
-
- public int read() throws IOException {
- if (this.closed) {
- throw new IOException("closed");
- } else {
- int var1 = this.field_0.read();
- if (var1 == -1) {
- this.close();
- }
-
- return var1;
- }
- }
-
- public int read(char[] var1, int var2, int var3) throws IOException {
- if (this.closed) {
- return -1;
- } else {
- int var4 = this.field_0.read(var1, var2, var3);
- if (var4 == -1) {
- this.close();
- }
-
- return var4;
- }
- }
-
- public boolean ready() throws IOException {
- return this.field_0 == null ? false : this.field_0.ready();
- }
-
- public void reset() throws IOException {
- if (this.field_0 != null) {
- this.field_0.reset();
- }
-
- }
-
- private void setEncoding(InputStream var1, String var2) throws IOException {
- this.assignedEncoding = var2;
- this.field_0 = createReader(var1, var2);
- }
-
- public long skip(long var1) throws IOException {
- return this.field_0 == null ? 0L : this.field_0.skip(var1);
- }
-
- private static String std2java(String var0) {
- String var1 = var0.toUpperCase();
- var1 = (String)charsets.get(var1);
- return var1 != null ? var1 : var0;
- }
-
- private void useEncodingDecl(PushbackInputStream var1, String var2) throws IOException {
- byte[] var3 = new byte[512];
- int var4 = var1.read(var3, 0, var3.length);
- var1.unread(var3, 0, var4);
- InputStreamReader var5 = new InputStreamReader(new ByteArrayInputStream(var3, 4, var4), var2);
- if (((Reader)var5).read() != 108) {
- this.setEncoding(var1, "UTF-8");
- } else {
- StringBuffer var7 = new StringBuffer();
- StringBuffer var8 = null;
- String var9 = null;
- boolean var10 = false;
- char var11 = 0;
- boolean var12 = false;
-
- int var6;
- label127:
- for(int var13 = 0; var13 < 507 && (var6 = ((Reader)var5).read()) != -1; ++var13) {
- if (var6 != 32 && var6 != 9 && var6 != 10 && var6 != 13) {
- if (var13 == 0) {
- break;
- }
-
- if (var6 == 63) {
- var12 = true;
- } else if (var12) {
- if (var6 == 62) {
- break;
- }
-
- var12 = false;
- }
-
- if (var9 != null && var10) {
- if (!Character.isWhitespace((char)var6)) {
- if (var6 == 34 || var6 == 39) {
- if (var11 == 0) {
- var11 = (char)var6;
- var7.setLength(0);
- continue;
- }
-
- if (var6 == var11) {
- if ("encoding".equals(var9)) {
- this.assignedEncoding = var7.toString();
-
- for(int var15 = 0; var15 < this.assignedEncoding.length(); ++var15) {
- var6 = this.assignedEncoding.charAt(var15);
- if ((var6 < 65 || var6 > 90) && (var6 < 97 || var6 > 122) && (var15 == 0 || var15 <= 0 || var6 != 45 && (var6 < 48 || var6 > 57) && var6 != 46 && var6 != 95)) {
- break label127;
- }
- }
-
- this.setEncoding(var1, this.assignedEncoding);
- return;
- }
-
- var9 = null;
- continue;
- }
- }
-
- var7.append((char)var6);
- }
- } else if (var8 == null) {
- if (!Character.isWhitespace((char)var6)) {
- var8 = var7;
- var7.setLength(0);
- var7.append((char)var6);
- var10 = false;
- }
- } else if (Character.isWhitespace((char)var6)) {
- var9 = var8.toString();
- } else if (var6 == 61) {
- if (var9 == null) {
- var9 = var8.toString();
- }
-
- var10 = true;
- var8 = null;
- var11 = 0;
- } else {
- var8.append((char)var6);
- }
- }
- }
-
- this.setEncoding(var1, "UTF-8");
- }
- }
- }
-